package com.agent.common.utils;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;

/**
 * 日期时间工具类
 * @author Jeff_Wan
 * @description 提供日期时间处理相关工具方法（全部使用UTC时区）
 */
public class DateUtils {

    public static final String DATE_FORMAT_UTC = "yyyy-MM-dd'T'HH:mm:ss'Z'";
    public static final String DATE_FORMAT = "yyyy-MM-dd";
    public static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";

    /**
     * 获取当前UTC日期字符串
     * @return yyyy-MM-dd 格式的日期字符串 (UTC)
     */
    public static String getCurrentDateStringUTC() {
        return LocalDate.now(ZoneId.of("UTC")).format(DateTimeFormatter.ofPattern(DATE_FORMAT));
    }

    /**
     * 获取当前UTC日期时间字符串
     * @return ISO 8601格式的日期时间字符串 (UTC)
     */
    public static String getCurrentDateTimeStringUTC() {
        return ZonedDateTime.now(ZoneId.of("UTC"))
                .format(DateTimeFormatter.ofPattern(DATE_FORMAT_UTC));
    }

    /**
     * 将Date转换为UTC LocalDateTime
     * @param date 日期对象
     * @return UTC时区的LocalDateTime对象
     */
    public static LocalDateTime toUTCLocalDateTime(Date date) {
        return date.toInstant().atZone(ZoneId.of("UTC")).toLocalDateTime();
    }

    /**
     * 计算订阅到期日期（UTC时区）
     * @param startDate 开始日期 (UTC)
     * @param isYearly 是否年订阅
     * @return 到期日期 (UTC)
     */
    public static LocalDate calculateExpiryDateUTC(LocalDate startDate, boolean isYearly) {
        return isYearly ? startDate.plusYears(1) : startDate.plusMonths(1);
    }

    /**
     * 获取当前UTC时间
     * @return 当前UTC时间的LocalDateTime对象
     */
    public static LocalDateTime currentUTCDateTime() {
        return LocalDateTime.now(ZoneId.of("UTC"));
    }
}